Resilient Device Connectivity.
Servers and Cloud, Optional.
Mobile ad-hoc mesh networking and peer-to-peer data sync for your enterprise applications.
Our Customers
Smarter syncing at the edge in just three steps
- 1
Install the Ditto SDK
Have your developer install the SDK into your existing mobile, web, IoT, or server application.
- 2
Write some queries
Our APIs offer instant peer-to-peer sync and automatic platform-agnostic peer discovery between your devices.
- 3
Watch your devices sync
The easiest way to enable cross-platform data sync at the edge, with or without the internet.
APIs for web, mobile, IoT,
and server side apps
Cross-platform means that we strive to make the developer experience feel natural for each programming language. Our APIs embrace reactive principles with excellent support for React, SwiftUI, Jetpack Compose, and more.
Read the docsCross platform for mobile, web, desktop, servers and IoT
Our APIs embrace reactive principles with excellent support for React, SwiftUI, Jetpack Compose, and more.
Modernize your app in minutes
Ditto's all-in-one platform has everything you need to quickly build reliable cloud-optional applications.
Write some code and instantly sync data
Once Ditto is installed in your applications, it just takes a few simple queries to start syncing data across the edge and cloud.
// initialize Ditto with your account credentials
let ditto = Ditto(...)
try ditto.startSync()
// insert data into your local data store
try await ditto.store.execute(
query: "INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })")
// listen for change to your local data store
try ditto.store.registerObserver(
query: "SELECT * FROM cars"){ result in
/* Update UI */
};
// sync only the data your device cares about
try ditto.sync.registerSubscription(query: "SELECT * FROM cars")
// initialize Ditto with your account credentials
val ditto = Ditto(DefaultAndroidDittoDependencies(context))
ditto.startSync()
// insert data into your local data store
ditto.store.execute(
"INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })")
// listen for change to your local data store
ditto.store.registerObserver("SELECT * FROM cars") { result ->
/* Update UI */
}
// sync only the data your device cares about
ditto.sync.registerSubscription("SELECT * FROM cars")
// initialize Ditto with your account credentials
const ditto = new Ditto(...)
ditto.startSync()
// insert data into your local data store
await ditto.store.execute(
"INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })"
);
// listen for change to your local data store
ditto.store.registerObserver("SELECT * FROM cars", (result) => {
/* Update UI */
})
// sync only the data your device cares about
ditto.sync.registerSubscription("SELECT * FROM cars")
// initialize Ditto with your account credentials
var ditto = new Ditto(...);
ditto.StartSync();
// insert data into your local data store
await ditto.Store.ExecuteAsync("INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })");
// listen for change to your local data store
var observer = ditto.Store.RegisterObserver(
"SELECT * FROM cars",
(result) => {
// handle change
});
// sync only the data your device cares about
ditto.Sync.RegisterSubscription("SELECT * FROM cars");
// initialize Ditto with your account credentials
Ditto ditto = Ditto(...);
ditto.start_sync();
ditto.get_store().execute("INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })");
// listen for change to your local data store
auto observer = ditto.get_store().register_observer("SELECT * FROM cars",
[&](QueryResult result) {
/* handle change */
});
// sync only the data your device cares about
auto subscription = ditto.sync().register_subscription("SELECT * FROM cars");
// initialize Ditto with your account credentials
let ditto = Ditto::new(config);
ditto.start_sync()?;
ditto
.store()
.execute("INSERT INTO cars DOCUMENTS ({ 'color': 'blue' })", None);
// listen for change to your local data store
let observer =
ditto
.store()
.register_observer("SELECT * from cars", None, move |result: QueryResult| {
// handle change
});
// sync only the data your device cares about
let subscription = ditto
.sync()
.register_subscription("SELECT * FROM cars", None);
Offline support
Even when devices are completely offline, devices can always read and write data.
Reactive design patterns
No more polling code for changes, register queries and get updates in real-time.
Expressive query system
Find what you need with advanced filters, sorting, transactions.
Bring your own authentication
Whether it's JWT, OAuth 2.0 or SAML. Bring your own identity providers.
Binary file sync
Build incredible applications that allow for synchronization of any type of files.
Cloud and peer-to-peer sync
Real-time peer-to-peer sync across edge devices, and up to the cloud when internet is available.
Cross-platform support
Built with the most languages for modern platforms: web, mobile, MacOS, Windows, Linux, Raspberry Pi.
Automatic conflict resolution
Simultaneous and offline changes are automatically resolved.
“Ditto moves key data quickly with no round trips to central services”
Ditto moves key operational data between restaurant team members quickly, seamlessly and with no round trips to central services. The more control and information we can put in the hands of operators and their teams, the better they can care for customers.
Chris Taylor
Senior Director of Customer Technology Solutions
Chick-fil-A
“Ditto's Intelligent Edge ensures our data is always up to date”
This app enables us to support crews with a comfortable device like an iPad efficiently, and we can rest assured that Ditto’s Intelligent Edge ensures our data is always up to date, even when network connectivity is poor or unavailable.
Michael Hack
Solution Architect
Lufthansa
“This technology truly revolutionizes the way crew members work”
Ditto's remarkable capabilities enable smooth and stable communication among crew devices, even without connectivity during flight. This allows our crew to shift from former manual operations to a more advanced and efficient working style and enables us to create more room for the crew to introduce new services to passengers. This technology truly revolutionizes the way crew members work.
Ms. Yu Abe
Director, IT Planning & Promotion Department
Japan Airlines
“Our Ditto partnership is providing real-time visibility for inflight devices”
Our approach to developing frontline tools prioritizes close partnership with our flight attendants during each development step. Ditto has been a great partner in ensuring our tools are seamless for our flight attendants. With their help, we have supported our workgroup by providing visibility of one another’s inflight mobile device… in real-time
Vikram Baskaran
VP of IT
Alaska Airlines
“Ditto ensures USAF's data remains as reliably agile as we are”
Ditto is our strategy to ensure that USAF's data remains as reliably agile as we are… with Ditto, married with these Apple Platforms… we can provide a seamless and mission-ready experience anywhere in the world, and under any circumstances.
Bryan Allebone
Major 55th Wing / BOCKSCAR
U.S. Air Force
Experience Ditto on
your own devices
Download our demo apps on your own iOS and Android devices and see the sync for yourself. Some of our most popular demo apps: